package xyz.chaobei.feature.maps;

import java.util.HashMap;
import java.util.Map;

/**
 * @author <a href='mailto:maruichao52@gmail.com'>MRC</a>
 * @since 2021/2/19
 */
public class MapsTest {


    public static void main(String[] args) {

        Map<Integer, String> map = new HashMap<>(16);

        for (int i = 0; i < 10; i++) {
            // 插入一个键，若键对应的值不存在则插入
            map.putIfAbsent(i, "val=" + i);
        }
        map.forEach((key, value) -> System.out.println(value));

        System.out.println("--------------------------------1");

        // 如果当前键为空，则执行计算，并将计算结果放入map
        map.computeIfAbsent(23, k -> "val=" + k);
        System.out.println(map.containsKey(23));

        System.out.println("--------------------------------2");

        // 使用指定key找出旧值olderValue,并且计算，将新的值放到map,
        map.computeIfPresent(1, (key, olderValue) -> key + olderValue);
        System.out.println(map.get(1));

        System.out.println("--------------------------------3");

        map.computeIfPresent(1, (key, older) -> null);
        System.out.println(map.containsKey(1));

        System.out.println("--------------------------------4");

        map.put(1, "new value");
        map.put(1, "new value2");

        map.put(2, "new value222");
        System.out.println(map.toString());

        System.out.println("--------------------------------5 remove");

        // 删掉相同键下面的一个指定值，
        map.remove(1, "new value");
        System.out.println(map.get(1));

        System.out.println("--------------------------------6 remove");

        // 删除指定键下面的所有值
        map.remove(2);
        System.out.println(map.get(2));

        System.out.println("--------------------------------7 merge");

        System.out.println(map.toString());
        // 使用当前key 检索，若存在则合并得到新值，若不存在则直接使用新值。新值为null,则发生移除
        map.merge(3, "new merage value", (old, newVal) -> old + "," + newVal);
        System.out.println("map.get(3)=" + map.get(3));

        System.out.println("--------------------------------8");
    }

}
